home *** CD-ROM | disk | FTP | other *** search
/ SGI Hot Mix 17 / Hot Mix 17.iso / HM17_SGI / research / lib / slider_alloc.pro < prev    next >
Text File  |  1997-07-08  |  10KB  |  334 lines

  1. ;
  2. ; $Id: slider_alloc.pro,v 1.10 1997/01/15 03:11:50 ali Exp $
  3. ;
  4. ;  WidSlider
  5. ;   Widget Slider class library
  6. ;
  7. ; Copyright (c) 1993-1997, Research Systems, Inc.  All rights reserved.
  8. ;   Unauthorized reproduction prohibited.
  9. ;
  10. ; MODIFICATION HISTORY
  11. ;       Written by:     Joshua Goldstein,       12/93
  12. ;
  13. ;
  14.  
  15.  
  16. ;
  17. ;  SLIDER_Icon
  18. ;       Return the slider toolbar icon
  19. ;
  20. FUNCTION SLIDER_Icon
  21.   RETURN, [ $
  22.     [ 0b, 0b, 0b, 0b ], $
  23.     [ 0b, 0b, 0b, 0b ], $
  24.     [ 0b, 0b, 0b, 0b ], $
  25.     [ 0b, 0b, 2b, 0b ], $
  26.     [ 0b, 0b, 3b, 0b ], $
  27.     [ 0b, 128b, 3b, 0b ], $
  28.     [ 0b, 192b, 3b, 0b ], $
  29.     [ 0b, 0b, 3b, 0b ], $
  30.     [ 0b, 0b, 3b, 0b ], $
  31.     [ 0b, 0b, 3b, 0b ], $
  32.     [ 0b, 0b, 3b, 0b ], $
  33.     [ 0b, 0b, 3b, 0b ], $
  34.     [ 0b, 0b, 3b, 0b ], $
  35.     [ 0b, 0b, 3b, 0b ], $
  36.     [ 0b, 0b, 3b, 0b ], $
  37.     [ 0b, 192b, 15b, 0b ], $
  38.     [ 0b, 224b, 31b, 0b ], $
  39.     [ 0b, 0b, 0b, 0b ], $
  40.     [ 0b, 0b, 0b, 0b ], $
  41.     [ 252b, 255b, 255b, 63b ], $
  42.     [ 252b, 255b, 255b, 63b ], $
  43.     [ 12b, 248b, 127b, 16b ], $
  44.     [ 12b, 8b, 67b, 32b ], $
  45.     [ 12b, 8b, 67b, 16b ], $
  46.     [ 12b, 8b, 67b, 32b ], $
  47.     [ 12b, 8b, 67b, 16b ], $
  48.     [ 12b, 8b, 67b, 32b ], $
  49.     [ 12b, 248b, 127b, 16b ], $
  50.     [ 172b, 170b, 170b, 42b ], $
  51.     [ 84b, 85b, 85b, 21b ], $
  52.     [ 0b, 0b, 0b, 0b ], $
  53.     [ 0b, 0b, 0b, 0b ]  $
  54.   ]
  55. END
  56.  
  57. ;
  58. ;  SLIDER_Copy
  59. ;   Copy a slider.  2 copy methods:
  60. ;
  61. ;   if( copy != NULL)       { *copy = *ptr; free(ptr); }
  62. ;   else                    { *(copy = malloc(...)) = *ptr; }
  63. ;
  64. PRO SLIDER_Copy, Ptr, Copy
  65.     GenCopy, Ptr, Copy
  66. END
  67.  
  68.  
  69. ;
  70. ;  SLIDER_Destroy
  71. ;   Release resources for the given slider
  72. ;
  73. PRO SLIDER_Destroy, Ptr
  74.     GenDestroy, Ptr
  75. END
  76.  
  77.  
  78. ;
  79. ;  SLIDER_Event
  80. ;   Event handling routine for slider dialog
  81. ;
  82. PRO SLIDER_Event, Event
  83.     WIDGET_CONTROL, Event.Id, GET_UVALUE=Ev                 ; Get Event
  84.     WIDGET_CONTROL, Event.Top, GET_UVALUE=Binfo, /NO_COPY   ; Get Dialog Info
  85.     Ptr2Obj, Binfo.ObjPtr, Obj                              ; Get Object
  86.  
  87.     CASE Ev OF
  88.  
  89.     'NAME':     Obj.Name        = Event.Value
  90.     'TITLE':    Obj.Title       = Event.Value
  91.     'SMIN':     Obj.SliderMin   = Event.Value
  92.     'SINIT':    Obj.SliderStart = Event.Value
  93.     'SMAX':     Obj.SliderMax   = Event.Value
  94.     'FONT':     Obj.Font        = Event.Value
  95.     'FRAME':    Obj.FrameSize   = Event.Value
  96.     'UVALUE':   Obj.Uvalue      = Event.Value
  97.     'XSIZE':    Obj.XSize       = Event.Value
  98.     'YSIZE':    Obj.YSize       = Event.Value
  99.     'XOFFSET':  Obj.XOffset     = Event.Value
  100.     'YOFFSET':  Obj.YOffset     = Event.Value
  101.  
  102.     'XFONT':    DoXFont, Obj, Binfo.Foci[4]
  103.  
  104.     'DO_DRAG':      Obj.SliderDrag      = 1 - Obj.SliderDrag
  105.     'DO_VERTICAL':  Obj.SliderVertical  = 1 - Obj.SliderVertical
  106.     'DO_SUPPRESS':  Obj.SliderSuppress  = 1 - Obj.SliderSuppress
  107.  
  108.     'DONE':     BEGIN
  109.         Accept, Obj, Binfo.ObjPtr
  110.         WIDGET_CONTROL, Event.Top, SET_UVALUE=Binfo, /NO_COPY
  111.         WIDGET_CONTROL, Event.Top, /DESTROY
  112.         RETURN
  113.         END
  114.  
  115.     'CANCEL':   BEGIN
  116.         Cancel, Obj, Binfo.ObjPtr
  117.         RETURN
  118.         END
  119.     ELSE:           MESSAGE, 'Unprocessed event: ' + Ev
  120.     ENDCASE
  121.  
  122.     Dirty   = 1     ; We've changed something since the last save
  123.  
  124.     SetNextFocus, Binfo, Event      ; Set next keyboard focus as necessary
  125.     Obj2Ptr, Obj, Binfo.ObjPtr      ; Put object back into pointer
  126.     WIDGET_CONTROL, Event.Top, SET_UVALUE=Binfo, /NO_COPY
  127. END
  128.  
  129.  
  130. ;
  131. ;  SLIDER_Build
  132. ;   Create a dialog box a slider object.  If ptr is nil then
  133. ;   create the object as well.
  134. ;
  135. PRO SLIDER_Build, Ptr, ParPtr
  136.  
  137.   COMMON WidEd_Comm
  138.  
  139.     SLIDER_Alloc, ParPtr, Ptr               ; Allocate object if necessary
  140.     MgrName = 'WE_SLIDER' + STRTRIM(Ptr, 2) ; Create dialog box name
  141.     IF XRegistered(MgrName) THEN RETURN   ; See if it already exists
  142.  
  143.     Title   = GetId(Ptr) + '(Child of ' + GetId(ParPtr) + ')'
  144.     Ptr2Obj, Ptr, Obj
  145.  
  146.     ;   Create dialog box
  147.  
  148.     IF SmallScreen[0] NE 0 THEN BEGIN
  149.         Base    = WIDGET_BASE(/COLUMN, TITLE=Title, GROUP_LEADER=TopDlg, $
  150.                         X_SCROLL_SIZE=SmallScreen[0], $
  151.                         Y_SCROLL_SIZE=SmallScreen[1] )
  152.     ENDIF ELSE BEGIN
  153.         Base    = WIDGET_BASE(/COLUMN, TITLE=Title, GROUP_LEADER=TopDlg)
  154.     ENDELSE
  155.     Foci    = LONARR(12)
  156.  
  157.     ;   Event Related Info
  158.  
  159.     Base1   = WIDGET_BASE(Base, /FRAME, /COLUMN)
  160.     Lab     = WIDGET_LABEL(Base1, VALUE="Basic Information")
  161.     Foci[0] = Field(Base1, "Slider Title:",Obj.Title,'TITLE',SIZE=50,/STRING)
  162.     Base2   = WIDGET_BASE(Base1,/ROW)
  163.     Foci[1] = Field(Base2, "Minimum:", Obj.SliderMin, 'SMIN', SIZE=8, /LONG)
  164.     Foci[2] = Field(Base2, "Initial:", Obj.SliderStart, 'SINIT', SIZE=8, /LONG)
  165.     Foci[3] = Field(Base2, "Maximum:", Obj.SliderMax, 'SMAX', SIZE=8, /LONG)
  166.  
  167.     Base2   = WIDGET_BASE(Base1,/ROW)
  168.     Foci[4] = Field(Base2, "Font:", Obj.Font, 'FONT', SIZE=50, /STRING)
  169.     IF !Version.OS NE 'Win32' AND !Version.OS NE 'MacOS' THEN $
  170.         XFontBtn    = WIDGET_BUTTON(Base2, VALUE="XFont", UVALUE="XFONT")
  171.  
  172.     Base2   = WIDGET_BASE(Base1, /ROW, /NONEXCLUSIVE)
  173.     Button  = WIDGET_BUTTON(Base2, VALUE='Generate Drag Events', $
  174.                             UVALUE='DO_DRAG')
  175.     IF Obj.SliderDrag THEN WIDGET_CONTROL, Button, /SET_BUTTON
  176.     Button  = WIDGET_BUTTON(Base2, VALUE='Vertical Slider', $
  177.                             UVALUE='DO_VERTICAL')
  178.     IF Obj.SliderVertical THEN WIDGET_CONTROL, Button, /SET_BUTTON
  179.     Button  = WIDGET_BUTTON(Base2, VALUE='Suppress display of current value', $
  180.                             UVALUE='DO_SUPPRESS')
  181.     IF Obj.SliderDrag THEN WIDGET_CONTROL, Button, /SET_BUTTON
  182.  
  183.     BuildOther, Base1, Obj, Foci, 5, /FRAME
  184.  
  185.     Base1   = WIDGET_BASE(Base, /FRAME, /COLUMN)
  186.     Lab     = WIDGET_LABEL(Base1, VALUE="Slider Appearance Controls")
  187.     BuildXY, Base1, Obj, Foci, 8, /SIZE, /OFFSET
  188.     BuildOkCancel, Base, Obj
  189.  
  190.     DlgInfo     = { $
  191.         Foci:       Foci, $
  192.         ObjPtr:     Ptr $
  193.     }
  194.     Obj.Dialog  = Base
  195.     WIDGET_CONTROL, Base, SET_UVALUE=DlgInfo, /NO_COPY
  196.     WIDGET_CONTROL, Base, /REALIZE
  197.     XMANAGER, MgrName, Base, EVENT_HANDLER='SLIDER_Event', CLEANUP='MISC_Kill'
  198.     Obj2Ptr, Obj, Ptr
  199. END
  200.  
  201.  
  202. ;
  203. ;  SLIDER_Save
  204. ;   Save slider information to a file.
  205. ;   This is a simple object to save.
  206. ;
  207. PRO SLIDER_Save, Unit, Ptr
  208.     GenWrite, Unit, Ptr
  209. END
  210.  
  211.  
  212. ;
  213. ;  SLIDER_Restore
  214. ;   Read in a slider object from a file
  215. ;
  216. PRO SLIDER_Restore, Unit, Parent, Ptr
  217.     MISC_Restore, Unit, Parent, Ptr, "SLIDER", 0
  218. END
  219.  
  220.  
  221. ;
  222. ;  SLIDER_Generate
  223. ;   Create a slider object for previewing
  224. ;
  225. PRO SLIDER_Generate, Base, Ptr
  226.   COMMON WidEd_Comm
  227.  
  228.     Ptr2Obj, Ptr, Obj
  229.     Id  = 0L            ; Prevent EXECUTE from creating a new variable
  230.  
  231.     ;   Value may not be outside of min/max
  232.  
  233.     Value   = Obj.SliderMin > Obj.SliderStart < Obj.SliderMax
  234.  
  235.     Cmd = 'Id = WIDGET_SLIDER(Base'
  236.     SAddCmd, Cmd, Obj.Font, 'FONT'
  237.     IAddCmd, Cmd, Obj.FrameSize, 'FRAME'
  238.     IF Obj.SliderMin NE Obj.SliderMax THEN BEGIN
  239.         IAddCmd, Cmd, Obj.SliderMin, 'MINIMUM', /FORCE
  240.         IAddCmd, Cmd, Obj.SliderMax, 'MAXIMUM', /FORCE
  241.     ENDIF
  242.     IAddCmd, Cmd, Obj.SliderSuppress, 'SUPPRESS_VALUE'
  243.     SAddCmd, Cmd, Obj.Title, 'TITLE'
  244.     IAddCmd, Cmd, Value, 'VALUE', /FORCE
  245.     IAddCmd, Cmd, Obj.SliderVertical, 'VERTICAL'
  246.     IAddCmd, Cmd, Obj.XSize, 'XSIZE'
  247.     IAddCmd, Cmd, Obj.YSize, 'YSIZE'
  248.     IAddCmd, Cmd, Obj.XOffset, 'XOFFSET'
  249.     IAddCmd, Cmd, Obj.YOffset, 'YOFFSET'
  250.  
  251.     Obj2Ptr, Obj, Ptr
  252.  
  253.     ; Create slider
  254.  
  255.     IF EXECUTE(Cmd+')') NE 1 THEN BEGIN
  256.         MESSAGE,'Could not create Slider ' + VarName(Ptr)
  257.     ENDIF
  258. END
  259.  
  260.  
  261. ;
  262. ;  SLIDER_GenWid
  263. ;   Create IDL code for creating a SLIDER
  264. ;
  265. PRO SLIDER_GenWid, Unit, Ptr, Parent
  266.  
  267.     Name    = VarId(Ptr)            ; Get name for slider
  268.     Ptr2Obj, Ptr, Obj               ; Get object information
  269.  
  270.     ;   Value may not be outside of min/max
  271.  
  272.     Value   = Obj.SliderMin > Obj.SliderStart < Obj.SliderMax
  273.  
  274.     XPRINTF, Unit, FORMAT='("  ",A," = WIDGET_SLIDER( ",A)', $
  275.         Name, Parent, /NO_EOL
  276.     ISaveCmd, Unit, Obj.SliderDrag, "DRAG"
  277.     SSaveCmd, Unit, Obj.Font, "FONT"
  278.     ISaveCmd, Unit, Obj.FrameSize, "FRAME"
  279.     IF Obj.SliderMin NE Obj.SliderMax THEN BEGIN
  280.         ISaveCmd, Unit, Obj.SliderMax, "MAXIMUM", /FORCE
  281.         ISaveCmd, Unit, Obj.SliderMin, "MINIMUM", /FORCE
  282.     ENDIF
  283.     ISaveCmd, Unit, Obj.SliderSuppress, "SUPPRESS"
  284.     SSaveCmd, Unit, Obj.Title, "TITLE"
  285.     SSaveCmd, Unit, UValue(Obj, Ptr), "UVALUE"
  286.     ISaveCmd, Unit, Value, "VALUE", /FORCE
  287.     ISaveCmd, Unit, Obj.SliderVertical, "VERTICAL"
  288.     ISaveCmd, Unit, Obj.XOffset, "XOFFSET"
  289.     ISaveCmd, Unit, Obj.XSize, "XSIZE"
  290.     ISaveCmd, Unit, Obj.YOffset, "YOFFSET"
  291.     ISaveCmd, Unit, Obj.YSize, "YSIZE"
  292.     XPRINTF, Unit, ')'
  293.  
  294.     Obj2Ptr, Obj, Ptr
  295. END
  296.  
  297.  
  298. ;
  299. ;  SLIDER_Alloc
  300. ;       Allocate a slider object.  Don't allocate if ptr is non-nil
  301. ;
  302. PRO SLIDER_Alloc, Parent, Ptr
  303.   COMMON WidEd_Comm
  304.  
  305.     IF KEYWORD_SET(Ptr) NE 0 THEN RETURN    ; if(ptr != NULL) return;
  306.  
  307.     Ptr = WIDGET_BASE(GROUP=TopDlg)         ; Make a pointe
  308.  
  309.     Obj = {                     $
  310.         WE_SLIDER,              $
  311.         Type:           'SLIDER',$
  312.         Parent:         Parent, $ ; Pointer to parent
  313.         Id:             NewId(),$ ; Permanent Id
  314.         Dialog:         0L,     $ ; Save Dialog ID (need for Cut consistency)
  315.         Next:           0L,     $ ; index of next child/free/top
  316.         Name:           '',     $ ; object name
  317.         Title:          '',     $ ; Slider title
  318.         FrameSize:      0,      $
  319.         Font:           '',     $
  320.         XSize:          0,      $
  321.         YSize:          0,      $
  322.         XOffset:        0,      $
  323.         YOffset:        0,      $
  324.         UValue:         '',     $
  325.         SliderDrag:     0,      $ ; Slider flags
  326.         SliderVertical: 0,      $
  327.         SliderSuppress: 0,      $
  328.         SliderMin:      0L,     $ ; Slider basic info
  329.         SliderStart:    0L,     $
  330.         SliderMax:      0L      $
  331.     }
  332.     Obj2Ptr, Obj, Ptr
  333. END
  334.